package com.fileReplace;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.fileReplace.util.Log;
/**
 * 获取符合指定参数类型的文件目录
 * @author larry
 *
 */
public class FileReader {
	
	private List<File> listFile=new ArrayList<File>();
	private List<File> listDir=new ArrayList<File>();
	/**
	 * 根据参数传来的信息，查找该目录下所有符合要求的文件，文件必须非隐藏且可读写
	 * @param dir 目录参数
	 * @param fileType 文件类型
	 * @param ignoreFlag 是否忽略子目录
	 * @param isListFile 是否显示符合条件的文件目录和文件列表
	 * @return
	 */
	public List<File> findFiles(String dir,String fileType,boolean ignoreFlag,boolean isListFile){
		listDir.add(new File(dir));
		if(!ignoreFlag){
			listDir(dir,ignoreFlag);
		}
		for(File _dir:listDir){
			File[] files=_dir.listFiles();
			for(File file:files){
				if(file.isFile()&&(file.getName().endsWith(fileType))&&file.canWrite()&&file.canRead()){
					listFile.add(file);
				}
			}
		}
		if(isListFile){
			Log.info("\n文件夹总数("+listDir.size()+")：");
			for(File _dir:listDir){			
				Log.info(_dir.getAbsolutePath());
			}
			Log.info("\n文件总数("+listFile.size()+")：");
			for(File _file:listFile){				
				Log.info(_file.getAbsolutePath());
			}
			
		}
		return listFile;
	}
	
	/**
	 * 递归目录下的所有文件夹且非隐藏可读写
	 * @param dir
	 * @param ignoreFlag 是否忽略子目录
	 */
	public void listDir(String dir,boolean ignoreFlag){
		File dirFile=new File(dir);
		
		File[] dirs=dirFile.listFiles();
		
		for(File _dir:dirs){
			if(_dir.isDirectory()&&!_dir.isHidden()&&_dir.canWrite()&&_dir.canRead()){
				listDir.add(_dir);
				listDir(_dir.getPath(),ignoreFlag);
			}
		}
	}

}
